package cn.tedu.search.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.io.Serializable;

@Data
@Accessors(chain = true) // 支持链式set赋值
@AllArgsConstructor      // 自动生成全参构造器
@NoArgsConstructor       // 自动生成无参构造器

// @Document 注解标记当前类是ES 框架对应的实体类
// 属性indexName 指定ES 中对应索引的名称，运行时，如果这个索引不存在，SpringData会自动创建索引
@Document(indexName = "items")
public class Item implements Serializable {

    // SpringData通过@Id注解标记当前实体类的主键属性
    @Id
    private Long id;

    // @Field 注解是SpringData提供的标记普通属性的注解
    // type用于指定属性的类型，FieldType是一个枚举，其中.Text指支持分词的字符串类型
    // 如果需要中文分词的，还需要设置中文分词器
    @Field(type = FieldType.Text,analyzer = "ik_max_word",searchAnalyzer = "ik_max_word")
    private String title;

    // Keyword类型指不分词的字符串类型
    @Field(type = FieldType.Keyword)
    private String category;

    @Field(type = FieldType.Keyword)
    private String brand;

    @Field(type = FieldType.Double)
    private Double price;

    // imgPath 是图片路径，路径不会称为搜索条件，所以这个列不需要创建索引，以节省空间
    // index = false 就是不创建索引的设置
    // 但是需要注意，虽然不创建索引，但是ES还是保存这个数据的
    @Field(type = FieldType.Keyword,index = false)
    private String imgPath;
}
